昨天查hash查著查著就睡著了...Orz
寫完今天這篇會在回去把查到的資料補上去。老實說查完Hash之後我還是不太理解如何實作出這題,會先研究下別人的解法,再看看昨天想到的方式是不是能用。
這邊是我在(參考1)連結中找到的解法:
def singleNumber(self, nums):
res = 0
for i in nums:
res ^= i
return res
看完只覺得這個方法滿厲害的,他用XOR的方式把重複到的數字給刪掉
確認過python裡面"^"這個運算子是XOR的意思,
for i in nums: #這句是把列表裡的元素按照索引一個個輸出
res ^= i #這句則會從0開始,按照順序把列表裡面所有的元素都XOR一遍
因為重複兩次的數字互相做XOR後會變成0,所以XOR完列表中全部索引的數字後就會得到最終解答。
這個部落客還寫了另外兩種同樣概念的精簡版,也是很厲害。
可以到參考1的連結裡參考。
這題我另外找到了一個部落格介紹(參考2),也寫了很多種寫法,有array和hash的方式
但因為我想用hash的方式練習,所以我只有先看了他寫用array的作法
def singleNumber(self, nums):
list = []
for i in nums:
if i in list:
list.remove(i)
else:
list.append(i)
return list.pop()
這個做法是先做一個空的結果列表,用新增移除的方式更新這個列表,讓他維持裡面的元素只會有一種這樣。
也是一個很有趣的作法。
參考1: 136. Single Number [medium] (Python)
參考2: LeetCode 136 Single Number (Python)